其他
怒肝 8 个月源码,我成为了 Spring 开源贡献者
The following article is from 程序员cxuan Author cxuan
官网入门系列,Spring官网读书笔记,这一系列的文章是入门Spring的不二之选,也是后续源码阅读的基础。 杂谈系列,Spring杂谈,这主要是一些补充内容,可以帮助大家更全面学习到Spring中的各个知识点,同时也会分享一些源码阅读技巧,个人学习心得之类的,杂谈嘛,就是不知道放哪里的文章都打算放这里,比如这篇文章。 源码分析系列,Spring源码解析,该专栏目前正在创作中,相对而言学习难度比较大,而且因为笔者写的比较细,估计大部分同学看起来会很费劲,不过如果你能认真看完,收获绝对巨大!
private int resolveConstructorArguments(String beanName, RootBeanDefinition mbd, BeanWrapper bw,
ConstructorArgumentValues cargs, ConstructorArgumentValues resolvedValues) {
// ....
for (Map.Entry<Integer, ConstructorArgumentValues.ValueHolder> entry : cargs.getIndexedArgumentValues().entrySet()) {
int index = entry.getKey();
if (index < 0) {
throw new BeanCreationException(mbd.getResourceDescription(), beanName,
"Invalid constructor argument index: " + index);
}
// 问题就出在这里
if (index > minNrOfArgs) {
minNrOfArgs = index + 1;
}
// .....
minNrOfArgs = index + 1;
}
提交 issue; 直接在 GitHub 上提交 PR(pull request)。
ConstructorArgumentValues cargs, ConstructorArgumentValues resolvedValues) {
TypeConverter customConverter = this.beanFactory.getCustomTypeConverter();
// ...
for (Map.Entry<Integer, ConstructorArgumentValues.ValueHolder> entry : cargs.getIndexedArgumentValues().entrySet()) {
int index = entry.getKey();
if (index < 0) {
throw new BeanCreationException(mbd.getResourceDescription(), beanName,
"Invalid constructor argument index: " + index);
}
if (index > minNrOfArgs) {
minNrOfArgs = index + 1;
}
// ....
}
// ....
return minNrOfArgs;
}
public DmzService getDmz(String name, int age, Date birthDay, OrderService orderService) {
public DmzService getDmz(OrderService orderService,String name) {
return new DmzService(orderService,name);
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="constructor">
<bean id="factoryObject" class="com.dmz.spring.first.instantiation.service.FactoryObject"/>
<bean class="com.dmz.spring.first.instantiation.service.OrderService" id="orderService"/>
<bean id="dmzService" factory-bean="factoryObject" factory-method="getDmz">
<constructor-arg index="1" value="dmz"/>
</bean>
</beans>
minNrOfArgs = index + 1;
}
minNrOfArgs = index + 1;
}s
首先摆出有问题的代码; 描述具体的问题,我是直接通过一个例子来描述的; 说出自己的建议。
首先,你应该要去 Stack Overflow 提问; 如果是 bug,你应该要指明版本以及你想要做什么; 如果是一个增强的话,要提供上下文并且描述清楚问题; 同一个问题,issue 跟 PR 最好只提交一个,因为 GitHub 认为它们是一样的,如果你还不能确定的话,先提交一个 issue。